{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三步：确定max_depth，min_child_weight后，重新调整n_estimate参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 获取特征，标签\n",
    "y = train['interest_level']\n",
    "X = train.drop(['interest_level'], axis=1)\n",
    "\n",
    "# 由于数据集较大，在此随机采样30%的数据构建训练样本，其余作为测试样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.7, stratify=y)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "# 各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=10):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds.split(X_train,y_train),\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_2_3_125.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_125.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print(\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0              1.040519           0.000824             1.038905   \n",
      "1              0.992147           0.001615             0.988753   \n",
      "2              0.950871           0.002240             0.946081   \n",
      "3              0.914434           0.002474             0.908550   \n",
      "4              0.883261           0.002507             0.876158   \n",
      "5              0.856869           0.002378             0.848541   \n",
      "6              0.833118           0.002618             0.823617   \n",
      "7              0.811963           0.002676             0.801532   \n",
      "8              0.793491           0.002495             0.781842   \n",
      "9              0.777089           0.002700             0.764488   \n",
      "10             0.762518           0.002441             0.748728   \n",
      "11             0.749310           0.002570             0.734558   \n",
      "12             0.737953           0.002771             0.722223   \n",
      "13             0.727922           0.002916             0.710941   \n",
      "14             0.719064           0.002810             0.700786   \n",
      "15             0.711094           0.003077             0.691758   \n",
      "16             0.703934           0.002795             0.683491   \n",
      "17             0.697206           0.003151             0.675688   \n",
      "18             0.691579           0.003066             0.668870   \n",
      "19             0.686197           0.002618             0.662606   \n",
      "20             0.681440           0.002861             0.656863   \n",
      "21             0.677299           0.002946             0.651601   \n",
      "22             0.673582           0.003154             0.646786   \n",
      "23             0.670175           0.003315             0.642413   \n",
      "24             0.666903           0.003629             0.638206   \n",
      "25             0.664067           0.003743             0.634283   \n",
      "26             0.661681           0.003838             0.630566   \n",
      "27             0.659112           0.003868             0.627355   \n",
      "28             0.656437           0.004040             0.623716   \n",
      "29             0.654257           0.004122             0.620642   \n",
      "..                  ...                ...                  ...   \n",
      "95             0.618723           0.004874             0.527950   \n",
      "96             0.618772           0.004961             0.527219   \n",
      "97             0.618894           0.005034             0.526265   \n",
      "98             0.618664           0.005196             0.525354   \n",
      "99             0.618451           0.005332             0.524541   \n",
      "100            0.618366           0.005611             0.523769   \n",
      "101            0.618271           0.005582             0.522819   \n",
      "102            0.618203           0.005934             0.521864   \n",
      "103            0.618275           0.006000             0.520943   \n",
      "104            0.618318           0.005946             0.519968   \n",
      "105            0.618340           0.005948             0.519110   \n",
      "106            0.618102           0.006121             0.518191   \n",
      "107            0.618082           0.006293             0.517385   \n",
      "108            0.617856           0.006500             0.516603   \n",
      "109            0.617842           0.006440             0.515881   \n",
      "110            0.617962           0.006588             0.515038   \n",
      "111            0.617969           0.006430             0.514349   \n",
      "112            0.617749           0.006420             0.513555   \n",
      "113            0.617661           0.006408             0.512815   \n",
      "114            0.617465           0.006343             0.512093   \n",
      "115            0.617431           0.006425             0.511432   \n",
      "116            0.617420           0.006725             0.510806   \n",
      "117            0.617172           0.006726             0.510006   \n",
      "118            0.617025           0.006717             0.509360   \n",
      "119            0.616857           0.006863             0.508639   \n",
      "120            0.616542           0.007127             0.507926   \n",
      "121            0.616706           0.007046             0.507145   \n",
      "122            0.616575           0.007162             0.506217   \n",
      "123            0.616363           0.007346             0.505425   \n",
      "124            0.616277           0.007517             0.504660   \n",
      "\n",
      "     train-mlogloss-std  \n",
      "0              0.000244  \n",
      "1              0.000504  \n",
      "2              0.001164  \n",
      "3              0.000837  \n",
      "4              0.001060  \n",
      "5              0.001162  \n",
      "6              0.001134  \n",
      "7              0.000928  \n",
      "8              0.000566  \n",
      "9              0.000587  \n",
      "10             0.000535  \n",
      "11             0.000619  \n",
      "12             0.000478  \n",
      "13             0.000387  \n",
      "14             0.000659  \n",
      "15             0.000808  \n",
      "16             0.000846  \n",
      "17             0.000865  \n",
      "18             0.000663  \n",
      "19             0.000669  \n",
      "20             0.000642  \n",
      "21             0.000593  \n",
      "22             0.000687  \n",
      "23             0.000731  \n",
      "24             0.000584  \n",
      "25             0.000646  \n",
      "26             0.000696  \n",
      "27             0.000559  \n",
      "28             0.000547  \n",
      "29             0.000610  \n",
      "..                  ...  \n",
      "95             0.000888  \n",
      "96             0.000768  \n",
      "97             0.000701  \n",
      "98             0.000671  \n",
      "99             0.000719  \n",
      "100            0.000696  \n",
      "101            0.000725  \n",
      "102            0.000817  \n",
      "103            0.000847  \n",
      "104            0.000936  \n",
      "105            0.000906  \n",
      "106            0.000939  \n",
      "107            0.001016  \n",
      "108            0.001015  \n",
      "109            0.001051  \n",
      "110            0.001065  \n",
      "111            0.001096  \n",
      "112            0.001151  \n",
      "113            0.001094  \n",
      "114            0.001203  \n",
      "115            0.001211  \n",
      "116            0.001139  \n",
      "117            0.001053  \n",
      "118            0.001058  \n",
      "119            0.001007  \n",
      "120            0.000995  \n",
      "121            0.000979  \n",
      "122            0.001215  \n",
      "123            0.001133  \n",
      "124            0.001177  \n",
      "\n",
      "[125 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.516005528028\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nSTlOAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0bccf780>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=125,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, X_train, y_train, cv_folds = kfold)\n",
    "#from sklearn.model_selection import cross_val_score\n",
    "#results = cross_val_score(xgb2_3, X_train, y_train, metrics='mlogloss', cv=kfold)\n",
    "#print results\n",
    "#print(\"CV logloss: %.2f%% (%.2f%%)\" % (results.mean()*100, results.std()*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAHNCAYAAABfHnHIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XeYFEX+x/H3lyUIIllBREQUEcGA\nGNDDiBhAz3SKOesp9zOf3oF3itm7UxRzjmfO6QwYwAAmEBUBRQVFMqIEgSXV74/qme6dnU3D7PTM\n7Of1PPNQ1V3dXTO77HequqranHOIiIhI7tSLuwIiIiJ1jYKviIhIjin4ioiI5JiCr4iISI4p+IqI\niOSYgq+IiEiOKfiKiIjkmIKviIhIjin4ioiI5JiCrySZ2f1mVmpmW6fZ93czc2Z2UMr2ZsG+j83s\nNzNbaWZzzOx1MzvGzBpFynYKzhF9LTKzL8zsPDMrycX7rIyZDTKzk+Kux9owsyZmNtTM9kyz76Tg\nc+8UQ73aB/XaLtfXjpOZPWhmS+KuB0Dw+TszaxN3Xeo6BV+JOg+YDTxkZg0SG4NgfDnwoHPu5cj2\nLsDnwCXAB8AJwN7A2cAM4H7gH2mucwuwS/A6EvgQuBH4d/bfUo0NAk6KuxJrqQlwGbBnmn2v4j/3\nWbmsUKA9vl51KviKpFM/7gpI/nDOLTKzU4E38UHzsiAIPwLMwQdnAMysPvAC0ArYyTk3KeV0T5nZ\nFUDPNJf6yTn3UST/upn1AI4GLszaG5JynHPzgHlx1yObzKyJc25p3PUQqQm1fKUM59xbwJ3AEDPr\nBQwFtgVOdc4tjBQ9FNgKuDpN4E2c60fn3AvVvPRCYGV0g5nVM7OLzWxy0B0+18weNrMOqQeb2SlB\n9/VyM1tgZs+bWbeUMp3N7Akzmxmcb46ZvZ3oBjWzaUB3YI9It/i0yiodlLnVzI43s0lmtjSox4HV\nfN/RczU0s39E3u88M3vAzNZPKbe3mY00s1/MbJmZ/WRmzwbdzZ0Ig+tlkffxYHBsuW7n4FwTzGwX\nMxsdnHOamZ0c7B9gZuOC9/aVme2fUp/Ng3pOCcrMMLOXo7cvgi7wT4PsA5F6DY2U+aOZjQnOsdjM\nRpjZLinXSnSbbm9mz5jZr8D3wb5Kf74VfObnBefbPM2+f5nZikQXrZn1NLNXgt/D0uA6r6b7fcyE\n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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a0cf54400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds4_2_3_125.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(5, 5), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail4_2_3_125.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "这次的调优结果，最佳 n_estimators=124"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
